﻿// Copyright (c) Brock Allen & Dominick Baier. All rights reserved.
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.


using IdentityServer4.Models;
using System.Collections.Generic;

namespace HECore.IdentityServer4.Client_Credentials
{
    public static class Config
    {
        public static IEnumerable<IdentityResource> IdentityResources =>
            new IdentityResource[]
            {
                new IdentityResources.OpenId()
            };

        /// <summary>
        /// 第一步：定义 API 范围:
        /// API 是系统中您想要保护的资源
        /// 资源定义可以通过多种方式加载，上面用于创建项目的模板展示了如何使用“代码即配置”方法
        /// 
        /// - - 如果您将在生产中使用它，那么为您的 API 指定一个逻辑名称非常重要。
        /// - - 开发人员将使用它通过您的身份服务器连接到您的 api。
        /// - - 它应该向开发人员和用户用简单的术语描述您的 api。
        /// </summary>
        public static IEnumerable<ApiScope> ApiScopes =>
            new List<ApiScope>
            {
                new ApiScope("api1", "My API"),
            };

        /// <summary>
        /// 第二步：定义客户端:
        /// 下一步是定义一个客户端应用程序，我们将用它来访问新的 API
        /// 对于这种情况，客户端将没有交互式用户，并且将使用所谓的客户端密钥与 IdentityServer 进行身份验证
        /// 
        /// - - 为此，添加客户端定义:
        /// - - 您可以将 ClientId 和 ClientSecret 视为应用程序本身的登录名和密码。
        /// - - 它向身份服务器标识您的应用程序，以便它知道哪个应用程序正在尝试连接到它。
        /// </summary>
        public static IEnumerable<Client> Clients =>
            new List<Client>
            {
                new Client
                {
                    ClientId = "client",

                    // no interactive user, use the clientid/secret for authentication
                    AllowedGrantTypes = GrantTypes.ClientCredentials,

                    // secret for authentication
                    ClientSecrets =
                    {
                        new Secret("secret".Sha256())
                    },

                    // scopes that client has access to
                    AllowedScopes = { "api1" }
                }
            };
    }
}